package com.tsy.server.wayline.service;

import com.tsy.server.wayline.model.dto.WaylineFileDTO;
import com.dji.sdk.cloudapi.wayline.GetWaylineListRequest;
import com.dji.sdk.cloudapi.wayline.GetWaylineListResponse;
import com.dji.sdk.common.PaginationData;
import org.springframework.web.multipart.MultipartFile;

import java.net.URL;
import java.sql.SQLException;
import java.util.List;
import java.util.Optional;

/**
 * @author sean
 * @version 0.3
 * @date 2021/12/22
 */
public interface IWaylineFileService {

    /**
     * 根据查询参数进行分页查询。
     * @param workspaceId 工作空间ID
     * @param param 查询参数
     * @return
     */
    PaginationData<GetWaylineListResponse> getWaylinesByParam(String workspaceId, GetWaylineListRequest param);

    /**
     * 获取项目下的所有航线文件。
     * @param projectId
     * @param param 查询参数
     * @return
     */
    List<GetWaylineListResponse> getProjectWaylines(Long projectId, GetWaylineListRequest param);

    /**
     * 根据航线文件ID查询该航线文件的信息。
     * @param workspaceId 工作空间ID
     * @param waylineId 航线ID
     * @return
     */
    Optional<GetWaylineListResponse> getWaylineByWaylineId(String workspaceId, String waylineId);

    /**
     * 获取文件对象的下载地址。
     * @param workspaceId 工作空间ID
     * @param waylineId 航线ID
     * @return
     */
    URL getObjectUrl(String workspaceId, String waylineId) throws SQLException;

    /**
     * 保存航线文件的基础信息。
     * @param workspaceId 工作空间ID
     * @param metadata 元数据
     * @return
     */
    Integer saveWaylineFile(String workspaceId, Long projectId, WaylineFileDTO metadata);

    /**
     * 根据传入参数更新文件是否被收藏。
     * @param workspaceId 工作空间ID
     * @param ids          航线ID集合
     * @param isFavorite   是否收藏
     * @return
     */
    Boolean markFavorite(String workspaceId, List<String> ids, Boolean isFavorite);

    /**
     * 批量查询工作空间中重复的文件名。
     * @param workspaceId 工作空间ID
     * @param names 名称集合
     * @return
     */
    List<String> getDuplicateNames(String workspaceId, List<String> names);

    /**
     * 根据航线ID删除航线文件。
     * @param workspaceId 工作空间ID
     * @param waylineId 航线ID
     */
    Boolean deleteByWaylineId(String workspaceId, String waylineId);

    /**
     * 导入 KMZ 航线文件。
     * @param file 文件
     * @param workspaceId 工作空间ID
     * @param creator 创建人
     */
    void importKmzFile(MultipartFile file, String workspaceId, Long projectId, String creator);


}
